/**
 * Created by zhangqi on 2015/11/10.
 * 表格列的求和，求平均等等计算
 * 调用说明：
 * $("#pay_master_jqgrid_list_wrap").jqGridCalculation({
        sTableId:sTableId
        ,aColModels:aColModels
        ,aColNames:aColNames
        ,oColSum: xhr.beans[0]
        ,aColumnEditParam:aColumnEditParam
    });
 *
 * @sTableId
 * @aColModels
 * @aColNames
 * @oColSum
 * @aColumnEditParam
 *
 */
;(function($){
    $.fn.extend({
        jqGridCalculation:function(options){
            var $wrap = this;
            var aColModels = options.aColModels;
            var aColNames = options.aColNames;
            var aColumnEditParam = options.aColumnEditParam;
            var sTableId = options.sTableId;
            var oColSum = options.oColSum;
            var aNames = []; //可用的name的数组

            //表格汇总组件
            var getTableWidth = function(){
                return $("#"+sTableId).outerWidth()+8*aColNames.length;
            }

            //
            var formateDataShow = function (opts) {
                var t = this;
                var opts = opts || {};
                var cellvalue = opts.oColSum[opts.oCalModel.name];
                switch (opts.oColumnEditParam.showType){
                    //如果是数值型
                    case "number":
                        if(opts.oColumnEditParam.showFormat){
                            if(!cellvalue){
                                cellvalue = 0;
                            }
                            cellvalue = parseFloat(cellvalue).toFixed(parseInt(opts.oColumnEditParam.showFormat));
                        }
                        break;
                    //如果没有类型，就当成是字符串处理
                    default:
                        cellvalue = cellvalue || "";
                }
                if(cellvalue !== 0){
                    cellvalue = cellvalue || "";
                }
                return cellvalue;
            }

            var sTable = '<div class="jqGrid-calculation-wrap"><ul class="jqGrid-calculation-row" style="width:'+getTableWidth()+'px;">';
            sTable += '<li style="width: '+($wrap.find(".ui-jqgrid-htable").find("th").eq(0).outerWidth() + ($wrap.find(".ui-jqgrid-htable").find("th").eq(1).outerWidth()) - 6)+'px;text-align:center;">合计：</li>';

            //当表格使用了多选，则合计文字单元格，取多选列+第一个字段。
            var is_multiselect = $("#"+sTableId).jqGrid('getGridParam', 'multiselect');
            //否则忽略前面两个字段改成了“合计”文字单元格
            var startIndex = is_multiselect ? 1: 2;
            for(var i=startIndex;i<aColModels.length;i++){
                if(!aColModels[i].isListShow && typeof aColModels[i].isListShow !== "undefined"){
                    var display = 'none';
                } else {
                    var display = 'list-item';
                }
                aNames.push(aColModels[i].name);
                var sSum = formateDataShow({
                    oColSum:oColSum
                    ,oCalModel:aColModels[i]
                    ,oColumnEditParam:aColumnEditParam[i]
                });
                sTable += '<li data-name="'+aColModels[i].name+'" title="'+ sSum +'" style="width:'+($('#'+sTableId+'_'+aColModels[i].name).outerWidth()-6)+'px;text-align:'+(aColModels[i].align?aColModels[i].align:'left')+';display:' + display + '">'+ sSum +'&nbsp;&nbsp;</li>';
            }
            sTable += '</ul></div>';
            var $table = $(sTable);
            // 如果已存在合计列，则进行清理
            $wrap.find(".ui-jqgrid-view").find(".jqGrid-calculation-wrap").remove();
            $wrap.find(".ui-jqgrid-view").append($table);
            //$wrap.find(".ui-jqgrid-bdiv > div").css({paddingBottom:"42px"});
            $table.find(".jqGrid-calculation-row").css({left:-$wrap.find(".ui-jqgrid-bdiv").scrollLeft() +"px"});

            $wrap.find(".ui-jqgrid-bdiv").on("scroll",function(e){
                $table.find(".jqGrid-calculation-row").css({left:-$(this).scrollLeft() +"px"});
            });

            //调整列宽的时候出发的事件回调
            $("#"+sTableId).jqGrid("setGridParam",{
                resizeStop:function(newwidth, index){
                    var sName = aNames[index-2];
                    var iWidth = $('#'+sTableId+'_'+aNames[index-3]).outerWidth()-4; //减4是因为共有4px的内边距
                    $wrap.find(".jqGrid-calculation-row").css({width:getTableWidth()+"px"}).find("li[data-name='"+sName+"']").css({width:(newwidth-22)+"px"});
                }
            });

            //隐藏列
            $wrap.find(".myjqgrid_backboard").off("click.calculate").on("click.calculate","input[type='checkbox']",function(){
                var dataName = $(this).attr("data-name");
                var $li = $wrap.find(".jqGrid-calculation-row").find("li[data-name='"+dataName+"']");
                //修改列宽
                $li.width($('#base_metadata_list_' + dataName).width());
                if($(this).prop("checked")){
                    $li.show(); //显示该合计列
                } else {
                    $li.hide(); //隐藏该合计列
                }
            });

            //如果有合计，翻页条的高度距离底部的高度应该更高
            $wrap.find(".ui-jqgrid-pager").css({marginTop:"36px"});

        }
    });
})(jQuery);
